package com.xiyin.utils;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

public class DateTimeUtils {

    // 定义一个常用的日期时间格式
    public static final String DEFAULT_DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";


    /**
     * 将LocalDateTime格式化为字符串
     *
     * @param dateTime 要格式化的LocalDateTime对象
     * @param pattern  格式化模式（如"yyyy-MM-dd HH:mm:ss"）
     * @return 格式化后的日期时间字符串
     */
    public static String format(LocalDateTime dateTime, String pattern) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
        return dateTime.format(formatter);
    }

    /**
     * 将LocalDateTime格式化为字符串
     *
     * @param dateTime 要格式化的LocalDateTime对象
     * @return 格式化后的日期时间字符串
     */
    public static String format(LocalDateTime dateTime) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_PATTERN);
        return dateTime.format(formatter);
    }

    /**
     * 将当前日期时间格式化为指定格式的字符串
     *
     * @param pattern 格式化模式
     * @return 格式化后的当前日期时间字符串
     */
    public static String formatCurrentDateTime(String pattern) {
        return format(LocalDateTime.now(), pattern);
    }

    /**
     * 将字符串解析为LocalDateTime对象
     *
     * @param dateTimeStr 字符串形式的日期时间
     * @param pattern     解析使用的日期时间格式模式
     * @return 解析后的LocalDateTime对象，如果解析失败则抛出DateTimeParseException
     */
    public static LocalDateTime parse(String dateTimeStr, String pattern) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
        return LocalDateTime.parse(dateTimeStr, formatter);
    }

    /**
     * 使用默认日期时间格式解析字符串
     *
     * @param dateTimeStr 默认格式的日期时间字符串
     * @return 解析后的LocalDateTime对象
     * @throws DateTimeParseException 如果字符串无法按照默认格式解析
     */
    public static LocalDateTime parseDefault(String dateTimeStr) {
        return parse(dateTimeStr, DEFAULT_DATE_TIME_PATTERN);
    }
}
